package models

import (
	"errors"
	"github.com/astaxie/beego/orm"
	"time"
)

const ERR_LOGIN_MAX_NUM = 5


func (this *UserInfo) AddErrIdx() error {
	this.ErrIdx++
	if this.ErrIdx > ERR_LOGIN_MAX_NUM {
		this.ErrIdx = ERR_LOGIN_MAX_NUM
	}
	this.ErrTime = time.Now().Format("2006-01-02 15:04:05")
	return this.Update()
}


type UserInfo struct {
	Id           int    `orm:"pk;auto"`              //自增型主键ID
	UserName     string `orm:"size(32);null;index"`  //8-16位/数字+英文组合/英文开头/不允许空格和其它字符
	Password     string `orm:"size(32);null;index"`  //MD5 密文/8-16位/数字+英文组合/英文开头/不允许空格和其它字符
	Uuid         string `orm:"size(64);null;index"`  //用户唯一 uuid
	CurrentToken string `orm:"size(512);null"`       //记录当前的 TOKEN
	ErrIdx       int    `orm:"size(1);null;index"`   //登录失败的计数器
	ErrTime      string `orm:"size(32);null"`        //登录失败的时间
}


func (this *UserInfo) Insert() error {
	if _, err := orm.NewOrm().Insert(this); err != nil {
		return err
	}
	return nil
}

func (this *UserInfo) Update(fields ...string) error {
	if _, err := orm.NewOrm().Update(this, fields...); err != nil {
		return err
	}
	return nil
}

func (this *UserInfo) Read(fields ...string) error {
	if err := orm.NewOrm().Read(this, fields...); err != nil {
		return err
	}
	return nil
}



func ReadUserInfoByUUID(uuid string) (info UserInfo, err error) {
	info.Uuid = uuid

	if len(uuid) == 0 {
		err = errors.New("用户编号不能为空")
		return
	}
	if err = orm.NewOrm().QueryTable("user_info").Filter("uuid", uuid).RelatedSel().One(&info); err != nil && err != orm.ErrNoRows {
		err = errors.New("系统繁忙,请重试!")
		return
	} else if err == orm.ErrNoRows {
		err = errors.New("无此用户编号")
		return
	} else {
		return
	}
}

func init() {
	orm.RegisterModel(new(UserInfo))
}
